package 牛客.字符串;

import java.util.Hashtable;

/*
    题目描述
        以字符串的形式读入两个数字，编写一个函数计算它们的和，以字符串形式返回。
        （字符串长度不大于100000，保证字符串仅由'0'~'9'这10种字符组成）
    示例1   输入 "1","99"    返回值 "100"

    思路：0.利用字符的ascII码来运算
         1.定义StringBuilder sb,因为都是数字，先定义进位 jinwei = 0
         2.int add = 通过取出每个字符串里面的字符减去字符‘0’再加起来再加上进位
         3.sb.append(add % 10)
         4.jinwei = add / 10
 */
public class 大数加法 {
    public String solve (String s, String t) {
        if(s.length() < t.length()){
            String temp = s;
            s = t;
            t = temp;
        }
        int longLength = s.length();
        int shortLength = t.length();
        int jinwei = 0, add;

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < shortLength; i++) {
            add = (s.charAt(longLength - 1 -i) - '0') + (t.charAt(shortLength - 1 - i) - '0') + jinwei;
            sb.append(add % 10);
            jinwei = add / 10;
        }
        for (int i = shortLength; i < longLength; i++) {
            add = (s.charAt(longLength - 1 -i) - '0') + jinwei;
            sb.append(add % 10);
            jinwei = add / 10;
        }
        if(jinwei != 0){
            sb.append(jinwei);
        }
        //因为StringBuilder的append()是从后面拼接字符，且减进位运算从右到左运算
        //需要反转回来才是我们需要的字符序列
        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        String s = "1283785838742981980", t = "567834932438257489583";
        大数加法 obj = new 大数加法();
        String str = obj.solve(s, t);
        System.out.println(str);
    }
}
